<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Common Language Runtime</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Common_Language_Runtime"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Common_Language_Runtime rootpage-Common_Language_Runtime skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span lang="en">Common Language Runtime</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr"><p class="mw-empty-elt">
</p>
<p><span class="lang-en" lang="en"><i><b>Common Language Runtime</b></i></span> (<b>CLR</b>) est le nom choisi par <a href="Microsoft" title="Microsoft">Microsoft</a> pour le composant de <a href="Machine_virtuelle" title="Machine virtuelle">machine virtuelle</a> du <span class="lang-en" lang="en"><i><a href="Framework_.NET" class="mw-redirect" title="Framework .NET">framework .NET</a></i></span>. Il s'agit de l'implémentation par Microsoft du standard <span class="lang-en" lang="en"><i><a href="Common_Language_Infrastructure" title="Common Language Infrastructure">Common Language Infrastructure</a></i></span> (CLI) qui définit l'<a href="Environnement_d'ex%C3%A9cution" title="Environnement d'exécution">environnement d'exécution</a> des codes de programmes. Le CLR fait tourner une sorte de <a href="Bytecode" title="Bytecode">bytecode</a> nommé <span class="lang-en" lang="en"><i><a href="Common_Intermediate_Language" title="Common Intermediate Language">Common Intermediate Language (CIL)</a></i></span>. Le <a href="Compilateur" title="Compilateur">compilateur</a> à la volée transforme le code CIL en code natif spécifique au <a href="Syst%C3%A8me_d'exploitation" title="Système d'exploitation">système d'exploitation</a>.
Le CLR fonctionne sur des systèmes d'exploitation <a href="Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a>.
</p><p>Le CLR est composé des quatre parties suivantes :
</p>
<ul><li><span class="lang-en" lang="en"><i><a href="Common_Type_System" title="Common Type System">Common Type System</a></i></span> (CTS) ;</li>
<li><span class="lang-en" lang="en"><i>Common Language Specification</i></span> (CLS) ;</li>
<li><span class="lang-en" lang="en"><i>Metadata</i></span> ;</li>
<li><span class="lang-en" lang="en"><i>Virtual Execution System</i></span> (VES).</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Introduction">Introduction</h2></div>
<p>Le CLR est à .NET ce que la <a href="Machine_virtuelle_java" class="mw-redirect" title="Machine virtuelle java">JVM</a> est à <a href="Java_(langage)" title="Java (langage)">Java</a>, c’est-à-dire une <a href="Machine_virtuelle" title="Machine virtuelle">machine virtuelle</a>, sans laquelle l'exécution de code .NET ne serait pas possible. À l'inverse de son concurrent, le <span class="lang-en" lang="en"><i>framework</i></span> .NET a été conçu pour permettre l'interopérabilité entre différents langages.
</p><p>Quel que soit le langage utilisé pour écrire une application .NET, le code doit être transformé en CIL (<span class="lang-en" lang="en"><i>Common Intermediate Language</i></span>). Ce code intermédiaire ne comporte aucune instruction relative au matériel (i.e. <span class="lang-en" lang="en"><i>hardware</i></span>) ou au système d'exploitation. Il ne peut donc pas être exécuté directement. Malgré cela, on pourrait tout à fait imaginer écrire directement une application en IL, langage qui ressemble à l'assembleur, sans passer par un langage de dernière génération comme le <a href="C_sharp" class="mw-redirect" title="C sharp">C#</a>.
</p><p>Le CLR est nécessaire pour exécuter le code intermédiaire. Il est basé sur le CTS (<span class="lang-en" lang="en"><i>Common Type System</i></span>)<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> et le CLS (<span class="lang-en" lang="en"><i>Common Language Specification</i></span>). Il apporte de nombreuses fonctionnalités comme le <a href="Ramasse-miettes_(informatique)" title="Ramasse-miettes (informatique)">ramasse-miettes</a> en <a href="Anglais" title="Anglais">anglais</a> : <span class="lang-en" lang="en"><i>Garbage Collector</i></span> (la mémoire utilisée par l'application lors de l'exécution est optimisée), la BCL (<a href="Base_Class_Library" title="Base Class Library">Base Class Library</a>), et le système de sécurité. Une fois le code présent dans le CLR, il va enfin pouvoir être compilé par le <a href="Compilation_%C3%A0_la_vol%C3%A9e" title="Compilation à la volée"><span class="lang-en" lang="en"><i>JIT Compiler</i></span> (<span class="lang-en" lang="en"><i>Just in Time</i></span>)</a> en langage natif de la machine.
</p><p>Il existe trois types de JIT :
</p>
<ul><li><i>Pre-JIT</i> : le code entier est directement compilé ;</li>
<li><i>Econo-JIT</i> : le code est compilé par parties, et la mémoire libérée si nécessaire ;</li>
<li><i>Normal-JIT</i> : le code n'est compilé que quand c'est nécessaire, mais est ensuite placé en cache pour pouvoir être réutilisé.</li></ul>
<p>Quel que soit le type de JIT, le but est d'accélérer l'exécution du code en réutilisant dès que possible le cache. Pour voir ceci visuellement, c'est très simple. Il suffit d'écrire une simple application ASP.NET (<span class="lang-en" lang="en"><i><a href="Hello_World" class="mw-redirect" title="Hello World">Hello World</a></i></span> par exemple). À la première exécution, le code est compilé. Par la suite et aussi longtemps que l'application ne subit pas de modifications, le cache sera utilisé, d'où une vitesse d'exécution bien plus rapide que lors de la première exécution.
</p><p>Le JIT fourni par Microsoft ne produit évidemment que du code natif Windows, mais les spécifications étant disponibles, il s'est trouvé un groupe de personnes ayant décidé de porter .NET sur <a href="Linux" title="Linux">Linux</a>, donnant naissance à la plate-forme de développement libre <a href="Mono_(informatique)" class="mw-redirect" title="Mono (informatique)">Mono</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Liste_des_langages_pris_en_charge">Liste des langages pris en charge</h2></div>
<p>Les langages pris en charge par le CLR sont différents de ceux qui sont pris en charge par la <a href="Dynamic_Language_Runtime" title="Dynamic Language Runtime">DLR</a>. Un bytecode obtenu sans utilisation d'anciennes API microsoft (MFC,win32) est appelé un <a href="Managed_code" title="Managed code">code managé</a> qui bénéficie des avantages de la plate-forme .NET (portabilité, ramasse-miettes).
Le CLR prend entre autres en charge :
</p>
<ul><li><a href="C_sharp" class="mw-redirect" title="C sharp">C#</a></li>
<li><a href="F_Sharp" title="F Sharp">F#</a></li>
<li><a href="Visual_Basic_.NET" title="Visual Basic .NET">VB.Net</a></li>
<li><a href="PowerShell" class="mw-redirect" title="PowerShell">PowerShell</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Voir_aussi">Voir aussi</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Articles_connexes">Articles connexes</h3></div>
<ul><li><span class="lang-en" lang="en"><i><a href="Parrot_(machine_virtuelle)" title="Parrot (machine virtuelle)">Parrot virtual machine</a></i></span></li>
<li><a href="Java_virtual_machine" class="mw-redirect" title="Java virtual machine">Java virtual machine</a></li>
<li><span class="lang-en" lang="en"><i><a href="Metadata" class="mw-redirect" title="Metadata">Metadata</a></i></span></li>
<li><a href="Moteur_d'ex%C3%A9cution" class="mw-redirect" title="Moteur d'exécution">Moteur d'exécution</a></li>
<li><span class="lang-en" lang="en"><a href="Common_Type_System" title="Common Type System">Common Type System</a></span></li>
<li>C++/CLI</li>
<li><a href="Dynamic_Language_Runtime" title="Dynamic Language Runtime">DLR</a></li>
<li><a href="Mono_(logiciel)" title="Mono (logiciel)">Mono</a></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Notes_et_références"><span id="Notes_et_r.C3.A9f.C3.A9rences"></span>Notes et références</h3></div>
<ul><li><abbr class="abbr indicateur-langue" title="Langue : français">(fr)</abbr> <a rel="nofollow" class="external text" href="https://msdn.microsoft.com/fr-fr/library/8bs2ecf4(v=vs.110).aspx">Vue d'ensemble du <span class="lang-en" lang="en"><i>Common Language Runtime</i></span></a> (Microsoft MSDN)</li></ul>
<div class="references-small decimal" style=""><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text"><span class="lang-en" lang="en"><i><a href="Common_Type_System" title="Common Type System">Common Type System</a></i></span></span>
</li>
</ol></div>
</div>
<div class="mw-heading mw-heading3"><h3 id="Lien_externe">Lien externe</h3></div>
<ul><li><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="http://en.csharp-online.net/index.php?title=.NET_Common_Language_Runtime_%28CLR%29">C# Online.NET / <span class="lang-en" lang="en"><i>Common Language Runtime</i></span></a></li></ul>
<div class="navbox-container" style="clear:both;">
</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de Microsoft</span> </span></li> <li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de l’informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-10-06" href="https://fr.wikipedia.org/wiki/?title=Common_Language_Runtime&oldid=229549183">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>